{{tag>réseau routage}}
----

====== Routage sous Linux ======

Le routage est fort utile pour créer un sous-réseau et cacher ainsi des ordinateur derrière un seul.

<note important>__**Ce que ne présente pas cet article**__ : Il n'est pas question de routage dynamique (utilisation de RIP, OSPF, etc. et du démon routed), pour le routage dynamique voir cette page [[routage_dynamique]].</note>


===== Pré-requis =====

Pour faire un routeur de votre ordinateur, il vous faut :
   * deux cartes réseau installées (si vous voulez séparer les réseaux)
   * deux réseaux différents à relier (vous pouvez les créer vous-même)

<note tip>Il n'est pas obligatoire d'utiliser 2 cartes réseau ou plus afin de séparer les réseaux. L'utilisation de plusieurs cartes réseau transforme juste votre ordinateur en **bastion**. 

Cette façon de faire est recommandée si vous voulez séparer physiquement 2 réseaux distincts et permet un contrôle total au niveau de votre ordinateur des échanges entre les 2 réseaux.</note>



===== Installation d'un réseau =====

Pour créer un réseau, il suffit d'associer une adresse IP à une des interfaces de votre système. 
Par exemple, je peux associer l'adresse IP **190.1.1.173** à mon interface **eth0**.

Il suffit de taper la commande suivante :
<code>sudo ifconfig eth0 add 190.1.1.173</code>

Pour vérifier votre association tapez :
<code>ifconfig</code>

Vous pouvez associer autant de réseaux que vous souhaitez à une interface. (c'est ça la fameuse magie du noyau Linux ^_^ )

Vous pouvez maintenant communiquer avec toutes les machines qui sont sur le même réseau que vous (ayant une **__autre adresse IP du réseau__** et **__reliées__** directement ou indirectement à votre carte réseau)

<note tip>Si vous voulez que Ubuntu se souvienne de votre association au redémarrage de l'ordinateur, il vous faut modifier le fichier **/etc/network/interfaces**</note>

<note help>__Indication__ : Lorsque vous associez une adresse IP à une interface, la table de routage est **automatiquement mis à jour**.</note>







===== Description du routage =====

Demander la table de routage actuelle : <code>route -n</code>


{{:table_routage.png}}

Le tableau ci-dessus s'affiche avec une ligne par route.

Les colonnes indiquent chacune une information sur la route paramétrée.

  - La **destination** (Réseau) : c'est une adresse IP qui indique __quels sont les paquets__ de données qui vont suivre cette route selon leur destination.
  - La **passerelle** (Gateway) : c'est une adresse IP qui indique __par où les paquets vont passer__ pour arriver à destination. Ils seront envoyés à cette adresse.
  - Le **masque de sous-réseau** (Genmask) : c'est une suite de 4 octets (comme une adresse IP) qui permet d'indiquer quelle est la taille de chaque partie de l'adresse IP (partie réseau et partie hôte). Par exemple, 255.255.255.0 comme ci-dessus indique que les 3 premiers octets seront utilisés pour le réseau et le dernier pour les adresses d'hôtes (ici la première ligne correspond à toutes les adresses comprises entre 193.17.1.1 et 193.17.1.254).
  - Les **indicateurs** : Ils correspondent à l'état de la route (ici **U** signifie que la route est active (Up) et **G** que la route est une passerelle (Gateway). Il existent d'autres indicateurs mais ils sont moins courants (tapez man route pour les découvrir)
  - Les **sauts** (Metric) : C'est un nombre qui indique combien d'intermédiaires il reste avant d'arriver à la destination. //Cette information n'est plus utilisée (sauf par des programmes comme routed (RIP)).//
  - Les **références** (Ref) : C'est un nombre qui indique le nombre de références associées à cette route. //Cette information n'est pas utilisée.//  
  - L'**utilisation** (Use) : C'est un compteur d'utilisation de la route.
  - L'**interface réseau** (Iface) : C'est le nom de l'interface réseau qui sera utilisée pour cette route. (pour avoir la liste des interfaces disponibles tapez ifconfig)   

Nous pouvons voir que cette table de routage :
    * Envoie à l'adresse //190.1.1.1// tous les paquets qui sont destinés au réseau //193.17.1.0// (de 193.17.1.1 à 193.17.1.254) ainsi que ceux destinés au réseau //10.226.7.0// (de 10.226.7.1 à 10.226.7.254) en passant par l'interface //eth0//. (**lignes 1 et 3**)
   * Envoie à l'adresse //190.1.1.249// tous les paquets qui sont destinés au réseau //192.22.1.0// (de 192.22.1.1 à 192.22.1.254) en passant par l'interface //eth0//. (**ligne 2**)
   * Envoi tous les paquets destinés au réseau //190.1.1.0// (de 190.1.1.1 à 190.1.1.254) **__directement__** aux adresses concernées en passant par l'interface //eth0//. (**ligne 4**)
   * Envoie tous les paquets destinés au réseau //169.254.0.0// (de 169.254.1.1 à 169.254.254.254) **__directement__** aux adresses concernées en passant par l'interface //eth0//. (**ligne 5**)
   * Envoie tous les paquets __**ne correspondant pas**__ à l'une des routes précédentes vers l'adresse //190.1.1.245// en passant par l'interface //eth0//.         (**dernière ligne**)

<note help>Indication : La dernière ligne correspond à ce que l'on nomme plus couramment la **passerelle par défaut** (vous comprenez pourquoi ! :-) )</note> 


===== Modification du routage =====

Nous allons maintenant voir comment mettre en œuvre le routage entre 2 réseaux.

C'est en utilisant les commandes **ifconfig** et **route** !





==== Objectif ====
Nous voulons pouvoir faire communiquer 2 ordinateurs qui ne sont pas sur le même réseau mais qui sont tous les 2 connectés au même routeur.

==== Données ====
  * Le réseau A : **190.1.1.0/255.255.255.0** (de 190.1.1.1 à 190.1.1.254)
  * L'**adresse IP du poste A** sur le réseau A : **190.1.1.2**
  * Le réseau B : **193.17.1.0/255.255.255.0** (de 193.17.1.1 à 193.17.1.254)
  * L'**adresse IP du poste B** sur le réseau B : **193.17.1.2**



==== Solution ====
Il faut tout d'abord avoir une adresse IP sur le réseau de destination afin de communiquer avec par le biais de l'interface qui y est connectée.
<note important>Attention de ne pas prendre une adresse IP déjà utilisée !</note>  
  - Sur le routeur, paramétrez votre interface réseau connectée au réseau A comme [[routage#installation_d_un_reseau|dit précedemment]]. (par exemple : **190.1.1.1**)
  - Sur le routeur, paramétrez votre interface réseau connectée au réseau B. (par exemple : **193.17.1.1**)
  - Si besoin est, configurez la table de routage du poste A :
<code>sudo route add -net 193.17.1.0 netmask 255.255.255.0 gw 190.1.1.1</code>
  - Si besoin est, configurez la table de routage du poste B :
<code>sudo route add -net 190.1.1.0 netmask 255.255.255.0 gw 193.17.1.1</code>

<note tip>__Astuce__ : Il est possible de ne pas toucher aux tables de routage des postes client si le routeur est déjà leur **route par défaut**.</note>

Maintenant, si vous faites un ping du poste A ou du poste B vers son homologue du réseau opposé vous pouvez remarquer qu'ils peuvent maintenant __communiquer ensembles__.   

<note important>La commande **route sous Windows** n'est que similaire. Renseignez-vous sur la commande à taper. Comme d'habitude, Microsoft se distingue pour le malheur de tous !</note>